在昨天的 Day13,我們已經完成第一個互動功能:
客戶傳「查訂單」 → 系統回傳 quickReply → 客戶點選單號
今天,我們要進一步做到:
👉 客戶點了某張訂單後,系統會自動顯示「這張單的產品明細」,並以 LINE 的 Carousel 形式漂亮呈現。
Carousel 是什麼?
簡單來說,就是一組可以左右滑動的卡片,每張卡片可以顯示圖片、文字、按鈕,非常適合多筆資料的視覺化展示!
我們今天的目標就是:
✅ 把 Odoo 單據中的產品明細,用 Carousel 的方式一次呈現給客戶!
但我們不會塞太多欄位,我們只顯示這四個資訊:
欄位名稱 | 說明 |
---|---|
產品名稱 | 來自 product_id.display_name |
訂購數量 | 來自 product_uom_qty |
已出貨數量 | 來自 qty_delivered |
價格(含稅) | 來自 price_total ,含稅總額 |
延續 Day13 的場景:
1. 客戶輸入:「我要查訂單」
2. 系統回傳 quickReply:「SO2025-0001、SO2025-0002…」
3. 客戶點選「SO2025-0001」
4. 系統自動查 Odoo 的 sale.order.line 明細
5. 每一筆產品明細都用 Carousel 的卡片顯示
這樣一來,客戶就不用自己輸入,也不用再回客服問「這張單到底買了什麼」—— 全部一滑就知道!
我們不能每次接收到訊息都查一次歷史銷售單據,所以我們簡單設定分流:
包含
「單據:」→ 回傳明細沒有包含
「單據:」 → 查詢銷售訂單單號📌 Fallback 是什麼?
當主要的條件或規則都沒被觸發時,系統會自動走 fallback,確保資料或流程不會中斷。
可以把它想成:「其他路都沒走通,那就走這條安全的最後一條路。」
以下提供我的設定作為範例,大家可以根據自己的需求去做調整。
Search Parameters:
{"fields":["product_template_id","product_uom_qty","qty_delivered","price_total"],"limit":80}
Parameters:
[[["order_id","=","{{split(3.events[].message.text; "單據:")}}"]]]
XXXX
(銷售單號)sale.order
尋找該單據
得到回傳的銷售單明細log後,使用 Carousel 的方式回傳!
所以新增一個 LINE 的 Make an API Call 模組
這邊也提供我的程式碼為範例
Body:
{"replyToken":"{{3.events[].replyToken}}","messages":[{"type":"text","text":"請確認單據:","quickReply":{"items":[{"type":"action","action":{"type":"message","label":"{{10.body[1].name}}","text":"單據:{{10.body[1].name}}"}},{"type":"action","action":{"type":"message","label":"{{10.body[2].name}}","text":"單據:{{10.body[2].name}}"}},{"type":"action","action":{"type":"message","label":"{{10.body[3].name}}","text":"單據:{{10.body[3].name}}"}},{"type":"action","action":{"type":"message","label":"{{10.body[4].name}}","text":"單據:{{10.body[4].name}}"}},{"type":"action","action":{"type":"message","label":"{{10.body[5].name}}","text":"單據:{{10.body[5].name}}"}}]}}]}{"replyToken":"{{3.events[].replyToken}}","messages":[{"type":"flex","altText":"產品明細","contents":{"type":"carousel","contents":[{"type":"bubble","body":{"type":"box","layout":"vertical","contents":[{"type":"text","text":"{{18.body[1].product_template_id.value}}","weight":"bold","size":"lg","wrap":true},{"type":"text","text":"數量:{{18.body[1].product_uom_qty}}","color":"#000000"},{"type":"text","text":"已出貨數量:{{18.body[1].qty_delivered}}","color":"#000000"},{"type":"text","text":"價格(含稅):{{18.body[1].price_total}}","color":"#000000"}]}},{"type":"bubble","body":{"type":"box","layout":"vertical","contents":[{"type":"text","text":"{{18.body[2].product_template_id.value}}","weight":"bold","size":"lg","wrap":true},{"type":"text","text":"數量:{{18.body[2].product_uom_qty}}","color":"#000000"},{"type":"text","text":"已出貨數量:{{18.body[2].qty_delivered}}","color":"#000000"},{"type":"text","text":"價格(含稅):{{18.body[2].price_total}}","color":"#000000"}]}}]}}]}
這個步驟完成後,其實就已經大功告成了🎉
現在來實測我們從 Day11~Day13 累積的成果吧!
使用者只需在第一次說明來意,後續全程只要點按鈕、滑卡片,就能完成查詢,體驗感💯!
看到這如果你也覺得這個自動化流程就是你要的!
那趕快回去從Day11 → Day12 → Day13開始跟著我一步一步完成吧~
今天我們做的事,看起來不多,但其實完成了一個質變:
客服不用花時間截圖,也不用打字報價單內容,系統就會自動幫你秀給客戶看。
📌 不過,互動客服功能會先暫停!
因為在明天的 Day15,我們要來切換一下題目,進入信件自動化的世界
所以會講解如何與 Gmail 串接、設定、以及 Gmail 標籤化技巧
如果你每天被 300 封信炸到心煩,那千萬不能錯過後面幾天的內容!
我們明天見 👋
今天的文章裡,也藏了幾個小彩蛋喔!
眼尖、細心的你有發現嗎?
如果還沒找到,就再回去多看幾次吧 😉
如果很想知道是什麼小彩蛋的話,就關注明天的文章吧~
答案會公布在明天的文章喔~~~